import numpy as np

def softmax(a):
    c = np.max(a) #找出输入中最大的constant
    # 减去c的目的是为了避免溢出，因为分子分母同时乘一个数对结果没有影响，
    # 将乘的数放进指数运算当中，相当于加法，这里是同时加一个负数
    exp_a = np.exp(a-c)
    sum_exp_a = sum(exp_a)#这里的exp_a已经减了c
    y = exp_a/sum_exp_a
    return y

# test
a = np.array([0.3,2.9,4.0])
y = softmax(a)
print(y) #[0.01821127 0.24519181 0.73659691]
print(np.sum(y))#softmax的输出总和是1，因此可以将softmax结果看成概率，比如这里是第二类的概率最高（74%m,）